<!doctype html>
<html>
<head>
<title>Testing XMLHttpRequest.getReponseHeader behavior</title>
<script src="/js-test-resources/js-test.js"></script>
<script type="text/javascript">
description("Test the required behavior of XMLHttpRequest.getResponseHeader()");

window.jsTestIsAsync = true;

var savedHeader = null;
var headerName = "Content-Type";
var nullTests = [ "SeT-COoKie",
                  "sEt-coOkIE2",
                  "xxx-mytest-headerabc",
                  null,
                  "Content-Type:" ];

var xhr = new XMLHttpRequest();

var headerValue;
function testGetResponseHeader(xhr, headerName, expectNull) {
    shouldNotThrow("{state: " + xhr.readyState + "}; headerValue = xhr.getResponseHeader('" + headerName + "');");
    if (expectNull)
        shouldBeNull("headerValue");
    else
        shouldBeNonNull("headerValue");

    return headerValue;
}

var result;
xhr.onreadystatechange = function() {
    var rState = this.readyState;
    result = testGetResponseHeader(this, headerName, rState <= XMLHttpRequest.OPENED);
    if (result) {
        if (savedHeader)
            shouldBe("result", "savedHeader");

        savedHeader = result;

        for (var i = 0; i < nullTests.length; ++i)
            testGetResponseHeader(this, nullTests[i], true);
    } else {
        if (rState > XMLHttpRequest.OPENED)
            testFailed("In ready state " + rState + ", unexpected null value for '" + headerName + "'.");
        else if (result !== null)
            testFailed("In ready state " + rState + ", expected null for '" + headerName + ", got: " + JSON.stringify(result) + ".");
        else
            testPassed("Header '" + headerName + "' is null in ready state " + rState + ".");
    }

    if (rState == XMLHttpRequest.DONE)
        finishJSTest();
}

function runTest() {
    // Test for readyState = 0
    testGetResponseHeader(xhr, headerName, true);
    shouldNotThrow('xhr.open("GET", "resources/1251.html", true);');
    // Test for readyState = 1
    testGetResponseHeader(xhr, headerName, true);
    shouldNotThrow("xhr.send(null);");
}
runTest();
</script>
</head>
</html>
